package com.hollysys.usersync.service;

import com.hollysys.usersync.entity.SyncResult;
import com.hollysys.usersync.entity.platform.User;
import org.springframework.lang.Nullable;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 用户信息同步服务
 *
 * @author Jeremy Yim
 */
public interface SyncUserService {

    /**
     * 获得用户信息字典
     *
     * @param key    字典键
     * @param value  字典值
     * @param filter 过滤条件
     * @return 用户信息字典
     */
    <R, V> Map<R, V> getUserMap(@NotNull Function<User, R> key, @NotNull Function<User, V> value,
                                @Nullable Predicate<User> filter);

    /**
     * 新增用户
     *
     * @param userList 用户实体列表
     * @return 用户同步状态
     */
    List<SyncResult> addUsers(List<User> userList);

    /**
     * 修改用户信息
     *
     * @param userList 用户实体列表
     * @return 用户同步状态
     */
    List<SyncResult> updateUsers(List<User> userList);

    /**
     * 删除用户
     *
     * @param userList 用户实体列表
     * @return 用户同步状态
     */
    List<SyncResult> deleteUsers(List<User> userList);

}
